package threading;

// 单例模式

// 这个类，就作为一个“单例类”
// 要求Singleton只有一个实例
class Singleton {
    // 这种单例模式是“饿汉模式”
    // 即：类加载阶段创建实例！ 创建实例的时机非常早

    // 创建该类的唯一实例（private static修饰的）
    private static Singleton instance = new Singleton();

    // 此处约定：类外部使用该类的实例就使用 getInstance 拿到该实例！（static修饰的）
    public static Singleton getInstance() {
        return instance;
    }

    // 构造方法私有，类外部就无法实例化该对象，强制制止其他类new 实例对象
    // 唯一入口就是使用getInstance方法拿到唯一的实例
    private Singleton() {

    }
}

public class Demo1 {
    public static void main(String[] args) {
        // 如果该类在类外部被new，就违背了初衷，应该禁止该类在类外部被new
        // 解决方式：把该类的构造方法设为私有的，此时类外就无法在实例化对象了
        //Singleton instance2 = new Singleton();

        // 正确获取实例方式：
        Singleton instance = Singleton.getInstance();
    }
}
